home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / comm / misc / ClipWatch.lha / ClipWatch / Sources / strings.c < prev    next >
C/C++ Source or Header  |  2000-12-29  |  4KB  |  205 lines

  1. /* -------------------------------------------- */
  2. /* Some functions to manipulate strings of char */
  3. /* By MaVaTi, for ClipWatch                     */
  4. /* -------------------------------------------- */
  5.  
  6. /* Copy 2 strings with length specified */
  7. void strcpy_limited(char *StringDest,char *StringSrc,int Lgt)
  8. {
  9.  int i;
  10.  for(i=0;i<Lgt;i++)
  11.  {
  12.   StringDest[i]=StringSrc[i];
  13.  }
  14. }
  15.  
  16. /* Compare 2 strings with length specified */
  17. int strcmp_limited(char *String1,char *String2,int Lgt)
  18. {
  19.  int i=0;
  20.  int idem=TRUE;
  21.  do
  22.  {
  23.   if(String1[i]!=String2[i])
  24.   {
  25.    idem=FALSE;
  26.   }
  27.   i++;
  28.  }
  29.  while((i<Lgt)&&(idem==TRUE));
  30.  if (idem==TRUE)
  31.   return 0;
  32.  else
  33.   return 1;
  34. }
  35.  
  36. /* Copy 2 strings terminated with specials caracters (other than traditionnal '\0') */
  37. /* We can have 2 types of special caracters (ex:'\t' and '\n') */
  38. /* Put 0 if you have only 1 type of special caracter */
  39. /* End the new string with a '\0' caracter instead of the special caracter */
  40. void strcpy_termnotnull(char *StringDest,char *StringSrc,char SpecialTerm,char SpecialTerm2)
  41. {
  42.  int i=0;
  43.  char car;
  44.  char end=FALSE;
  45.  do
  46.  {
  47.   car=StringSrc[i];
  48.   StringDest[i]=car;
  49.   if ((car==SpecialTerm)||((SpecialTerm2!=0)&&(car==SpecialTerm2)))
  50.   {
  51.    StringDest[i]='\0';
  52.    end=TRUE;
  53.   }
  54.   i++;
  55.  }
  56.  while(end!=TRUE);
  57. }
  58.  
  59. /* Compare 2 strings terminated with specials caracters (other than traditionnal '\0') */
  60. /* We can have 2 types of special caracters (ex:'\t' and '\n') */
  61. /* Put 0 if you have only 1 type of special caracter */
  62. int strcmp_termnotnull(char *String1,char *String2,char SpecialTerm,char SpecialTerm2)
  63. {
  64.  int i=0;
  65.  char car;
  66.  char end=FALSE;
  67.  int idem=TRUE;
  68.  do
  69.  {
  70.   car=String1[i];
  71.   if ((car==SpecialTerm)||((SpecialTerm2!=0)&&(car==SpecialTerm2)))
  72.   {
  73.    end=TRUE;
  74.   }
  75.   if((car!=String2[i])&&(end==FALSE))
  76.   {
  77.    idem=FALSE;
  78.   }
  79.   i++;
  80.  }
  81.  while((end==FALSE)&&(idem==TRUE));
  82.  if (idem==TRUE)
  83.   return 0;
  84.  else
  85.   return 1;
  86. }
  87.  
  88. /* Search a string into another one
  89.    Back:pointer on the string found if found
  90.    -----------------------------------------------------------
  91.    String:pointer on the string to explore
  92.    nbrcar:nbr of caracters of the string to explore
  93.    StringKey:pointer on the string to found
  94.    nbrcarkey:nbr of caracters of the string to found
  95. */
  96. char * str_pos(char *String,int nbrcar,char *StringKey,int nbrcarkey)
  97. {
  98.  int i=0;
  99.  int i_key;
  100.  char *idem=NULL;
  101.  char degage;
  102.  do
  103.  {
  104.   /* Found same start... */
  105.   if (String[i]==StringKey[0])
  106.   {
  107.    degage=FALSE;
  108.    i_key=0;
  109.    do
  110.    {
  111.     if (String[i+i_key]!=StringKey[i_key])
  112.     {
  113.      degage=TRUE;
  114.     }
  115.     i_key++;
  116.    }
  117.    while((i_key<nbrcarkey)&&(degage==FALSE));
  118.    if (degage==FALSE)
  119.    {
  120.     idem=&String[i];
  121.    }
  122.   }
  123.   i++;
  124.  }
  125.  while((i<nbrcar)&&(idem==NULL));
  126.  return idem;
  127. }
  128.  
  129. /* Extracting a string from a frame with many fields separated
  130.    with a special caracter
  131.    If found caracters ',' they're replaced with '.' ( for atof() )
  132.    Back:give a pointer on the string searched
  133.    -----------------------------------------------------------
  134.    String:pointer on the string to explore
  135.    nbrcar:nbr of caracters of the string to explore
  136.    Champ:which field we're interested in
  137.    Separateur:special caracter delimiting the differents fields   
  138. */
  139. char * str_field(char *String,int nbrcar,int Champ,char Separateur)
  140. {
  141.  int i=0;
  142.  char car;
  143.  int CptChamp=1;
  144.  char *adrstart=NULL;
  145.  /* Premier Champ sélectionné ? */
  146.  if (Champ==1)
  147.  {
  148.   adrstart=String;
  149.  }
  150.  else
  151.  {
  152.   /* Recherche Séparateur de champ */
  153.   do
  154.   {
  155.    car=String[i];
  156.    if (car==Separateur)
  157.    {
  158.     CptChamp++;
  159.     /*C'est le champ qui nous intéresse ?*/
  160.     if (CptChamp==Champ)
  161.     {
  162.      adrstart=String+i+1;
  163.     }
  164.    }
  165.    i++;
  166.   }
  167.   while((i<nbrcar)&&(CptChamp!=Champ));
  168.  }
  169.  /* Remplacement caractère ',' par le '.' (fonction atof!) */
  170.  if (adrstart!=NULL)
  171.  {
  172.   do
  173.   {
  174.    car=String[i];
  175.    if (car==',')
  176.    {
  177.     String[i]='.';
  178.    }
  179.    i++;
  180.   }
  181.   while(i<nbrcar);
  182.  }
  183.  return adrstart;
  184. }
  185.  
  186. /* Generate a string from a number with a number of zeros in front required */ 
  187. void RealToStrWithZeros(char * strfmt,int nbrcar,unsigned long nbr)
  188. {
  189.  int lackcar;
  190.  int lgt;
  191.  int i;
  192.  sprintf(strfmt,"%d",nbr);
  193.  lgt=strlen(strfmt);
  194.  if (lgt<nbrcar)
  195.  {
  196.   lackcar=nbrcar-lgt;
  197.   for(i=0;i<lackcar;i++)
  198.   {
  199.    strfmt[i]='0';
  200.   }
  201.   sprintf(strfmt+i,"%d",nbr);
  202.  }
  203. }
  204.  
  205.